package cn.tedu._05weibo.common.response;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import springfox.documentation.spring.web.json.Json;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class JsonResult {
    //响应状态 提示消息 响应数据
    /**
     * 响应状态码
     */
    private Integer state;
    /**
     * 响应消息
     */
    private String message;
    /**
     * 响应数据  可能是VO 也可能是List集合
     */
    private Object data;

    //全参构造  无参构造

//    StatusCode.getState(),StatusCode.getMesaage
    //构造方法3：适用于不需要返回具体数据的Controller方法
    public JsonResult(Integer state, String message) {
        this.state = state;
        this.message = message;
    }

    //1.针对没有具体数据返回的控制器方法[登录，注册] 使用改构造方法
    public JsonResult(StatusCode statusCode) {
        this.state = statusCode.getState();
        this.message = statusCode.getMessage();
    }

    //2.针对有具体数据返回的控制器方法[微博首页，评论表]
    public JsonResult(StatusCode statusCode, Object data) {
        this.state = statusCode.getState();
        this.message = statusCode.getMessage();
        this.data = data;
    }


    /**
     * 针对于操作成功的场景。可以再次进行封装
     * 定义两个静态方法
     * 1.针对于有具体数据返回
     * 2.针对于没有具体数据返回
     */
    public static JsonResult ok(Object data){
        return new JsonResult(StatusCode.OPERATION_SUCCESS,data);
    }

    public static JsonResult ok(){
        return ok(null);
    }

}
